package com.ungao.framework.proxy;

/**
 * 代理接口
 */
public interface ProxyFactory {

    /**
     * 代理对象
     *
     * @param target
     * @param <T>
     * @return
     */
    <T> T getProxy(T target);

    /**
     * 代理对象
     *
     * @param target
     * @param <T>
     * @return
     */
    <T> T getProxy(Class<T> target) throws IllegalAccessException, InstantiationException;

    /**
     * 代理接口
     *
     * @param clazz
     * @param target
     * @param <R>
     * @param <T>
     * @return
     */
    <R, T extends R> R getProxy(Class<R> clazz, T target);

    /**
     * 代理接口
     *
     * @param clazz
     * @param target
     * @param <R>
     * @param <T>
     * @return
     */
    <R, T extends R> R getProxy(Class<R> clazz, Class<T> target) throws IllegalAccessException, InstantiationException;
}
